/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package bpmn.util;

import bpmn.Activity;
import bpmn.AdHocProcess;
import bpmn.Annotation;
import bpmn.Artifact;
import bpmn.ArtifactInput;
import bpmn.ArtifactOutput;
import bpmn.Assignment;
import bpmn.Association;
import bpmn.BPMNElement;
import bpmn.BpmnPackage;
import bpmn.BusinessProcessDiagram;
import bpmn.Cancel;
import bpmn.Category;
import bpmn.Compensate;
import bpmn.Complex;
import bpmn.Condition;
import bpmn.Conditional;
import bpmn.ConnectingObjects;
import bpmn.DataBased;
import bpmn.DataObject;
import bpmn.Embedded;
import bpmn.End;
import bpmn.Entity;
import bpmn.Event;
import bpmn.EventBased;
import bpmn.EventDetail;
import bpmn.Exclusive;
import bpmn.Expression;
import bpmn.FlowObject;
import bpmn.Gate;
import bpmn.Gateway;
import bpmn.GraphicalElement;
import bpmn.Group;
import bpmn.Inclusive;
import bpmn.InputSet;
import bpmn.Intermediate;
import bpmn.Lane;
import bpmn.Link;
import bpmn.Manual;
import bpmn.Message;
import bpmn.MessageEvent;
import bpmn.MessageFlow;
import bpmn.MultiInstanceLoopActivity;
import bpmn.None;
import bpmn.OutputSet;
import bpmn.Parallel;
import bpmn.Participant;
import bpmn.Pool;
import bpmn.Property;
import bpmn.Receive;
import bpmn.ReferenceSubProcess;
import bpmn.ReferenceTask;
import bpmn.Reusable;
import bpmn.Role;
import bpmn.Script;
import bpmn.Send;
import bpmn.SequenceFlow;
import bpmn.Service;
import bpmn.Signal;
import bpmn.StandardLoopActivity;
import bpmn.Start;
import bpmn.SubProcess;
import bpmn.SupportingElement;
import bpmn.Swimlane;
import bpmn.Task;
import bpmn.Terminate;
import bpmn.TimeDateExpression;
import bpmn.Timer;
import bpmn.Transaction;
import bpmn.User;
import bpmn.WebService;

import java.util.List;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;

/**
 * <!-- begin-user-doc -->
 * The <b>Switch</b> for the model's inheritance hierarchy.
 * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
 * to invoke the <code>caseXXX</code> method for each class of the model,
 * starting with the actual class of the object
 * and proceeding up the inheritance hierarchy
 * until a non-null result is returned,
 * which is the result of the switch.
 * <!-- end-user-doc -->
 * @see bpmn.BpmnPackage
 * @generated
 */
public class BpmnSwitch<T> {
	/**
	 * The cached model package
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected static BpmnPackage modelPackage;

	/**
	 * Creates an instance of the switch.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public BpmnSwitch() {
		if (modelPackage == null) {
			modelPackage = BpmnPackage.eINSTANCE;
		}
	}

	/**
	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the first non-null result returned by a <code>caseXXX</code> call.
	 * @generated
	 */
	public T doSwitch(EObject theEObject) {
		return doSwitch(theEObject.eClass(), theEObject);
	}

	/**
	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the first non-null result returned by a <code>caseXXX</code> call.
	 * @generated
	 */
	protected T doSwitch(EClass theEClass, EObject theEObject) {
		if (theEClass.eContainer() == modelPackage) {
			return doSwitch(theEClass.getClassifierID(), theEObject);
		}
		else {
			List<EClass> eSuperTypes = theEClass.getESuperTypes();
			return
				eSuperTypes.isEmpty() ?
					defaultCase(theEObject) :
					doSwitch(eSuperTypes.get(0), theEObject);
		}
	}

	/**
	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the first non-null result returned by a <code>caseXXX</code> call.
	 * @generated
	 */
	protected T doSwitch(int classifierID, EObject theEObject) {
		switch (classifierID) {
			case BpmnPackage.ACTIVITY: {
				Activity activity = (Activity)theEObject;
				T result = caseActivity(activity);
				if (result == null) result = caseFlowObject(activity);
				if (result == null) result = caseGraphicalElement(activity);
				if (result == null) result = caseBPMNElement(activity);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.AD_HOC_PROCESS: {
				AdHocProcess adHocProcess = (AdHocProcess)theEObject;
				T result = caseAdHocProcess(adHocProcess);
				if (result == null) result = caseProcess(adHocProcess);
				if (result == null) result = caseSupportingElement(adHocProcess);
				if (result == null) result = caseBPMNElement(adHocProcess);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.ANNOTATION: {
				Annotation annotation = (Annotation)theEObject;
				T result = caseAnnotation(annotation);
				if (result == null) result = caseArtifact(annotation);
				if (result == null) result = caseGraphicalElement(annotation);
				if (result == null) result = caseBPMNElement(annotation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.ARTIFACT: {
				Artifact artifact = (Artifact)theEObject;
				T result = caseArtifact(artifact);
				if (result == null) result = caseGraphicalElement(artifact);
				if (result == null) result = caseBPMNElement(artifact);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.ARTIFACT_INPUT: {
				ArtifactInput artifactInput = (ArtifactInput)theEObject;
				T result = caseArtifactInput(artifactInput);
				if (result == null) result = caseBPMNElement(artifactInput);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.ARTIFACT_OUTPUT: {
				ArtifactOutput artifactOutput = (ArtifactOutput)theEObject;
				T result = caseArtifactOutput(artifactOutput);
				if (result == null) result = caseBPMNElement(artifactOutput);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.ASSIGNMENT: {
				Assignment assignment = (Assignment)theEObject;
				T result = caseAssignment(assignment);
				if (result == null) result = caseSupportingElement(assignment);
				if (result == null) result = caseBPMNElement(assignment);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.ASSOCIATION: {
				Association association = (Association)theEObject;
				T result = caseAssociation(association);
				if (result == null) result = caseConnectingObjects(association);
				if (result == null) result = caseGraphicalElement(association);
				if (result == null) result = caseBPMNElement(association);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.BPMN_ELEMENT: {
				BPMNElement bpmnElement = (BPMNElement)theEObject;
				T result = caseBPMNElement(bpmnElement);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.BUSINESS_PROCESS_DIAGRAM: {
				BusinessProcessDiagram businessProcessDiagram = (BusinessProcessDiagram)theEObject;
				T result = caseBusinessProcessDiagram(businessProcessDiagram);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.CANCEL: {
				Cancel cancel = (Cancel)theEObject;
				T result = caseCancel(cancel);
				if (result == null) result = caseEventDetail(cancel);
				if (result == null) result = caseSupportingElement(cancel);
				if (result == null) result = caseBPMNElement(cancel);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.CATEGORY: {
				Category category = (Category)theEObject;
				T result = caseCategory(category);
				if (result == null) result = caseSupportingElement(category);
				if (result == null) result = caseBPMNElement(category);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.COMPENSATE: {
				Compensate compensate = (Compensate)theEObject;
				T result = caseCompensate(compensate);
				if (result == null) result = caseEventDetail(compensate);
				if (result == null) result = caseSupportingElement(compensate);
				if (result == null) result = caseBPMNElement(compensate);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.COMPLEX: {
				Complex complex = (Complex)theEObject;
				T result = caseComplex(complex);
				if (result == null) result = caseGateway(complex);
				if (result == null) result = caseFlowObject(complex);
				if (result == null) result = caseGraphicalElement(complex);
				if (result == null) result = caseBPMNElement(complex);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.CONDITION: {
				Condition condition = (Condition)theEObject;
				T result = caseCondition(condition);
				if (result == null) result = caseSupportingElement(condition);
				if (result == null) result = caseBPMNElement(condition);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.CONDITIONAL: {
				Conditional conditional = (Conditional)theEObject;
				T result = caseConditional(conditional);
				if (result == null) result = caseEventDetail(conditional);
				if (result == null) result = caseSupportingElement(conditional);
				if (result == null) result = caseBPMNElement(conditional);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.CONNECTING_OBJECTS: {
				ConnectingObjects connectingObjects = (ConnectingObjects)theEObject;
				T result = caseConnectingObjects(connectingObjects);
				if (result == null) result = caseGraphicalElement(connectingObjects);
				if (result == null) result = caseBPMNElement(connectingObjects);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.DATA_BASED: {
				DataBased dataBased = (DataBased)theEObject;
				T result = caseDataBased(dataBased);
				if (result == null) result = caseExclusive(dataBased);
				if (result == null) result = caseGateway(dataBased);
				if (result == null) result = caseFlowObject(dataBased);
				if (result == null) result = caseGraphicalElement(dataBased);
				if (result == null) result = caseBPMNElement(dataBased);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.DATA_OBJECT: {
				DataObject dataObject = (DataObject)theEObject;
				T result = caseDataObject(dataObject);
				if (result == null) result = caseArtifact(dataObject);
				if (result == null) result = caseGraphicalElement(dataObject);
				if (result == null) result = caseBPMNElement(dataObject);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.EMBEDDED: {
				Embedded embedded = (Embedded)theEObject;
				T result = caseEmbedded(embedded);
				if (result == null) result = caseSubProcess(embedded);
				if (result == null) result = caseActivity(embedded);
				if (result == null) result = caseFlowObject(embedded);
				if (result == null) result = caseGraphicalElement(embedded);
				if (result == null) result = caseBPMNElement(embedded);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.END: {
				End end = (End)theEObject;
				T result = caseEnd(end);
				if (result == null) result = caseEvent(end);
				if (result == null) result = caseFlowObject(end);
				if (result == null) result = caseGraphicalElement(end);
				if (result == null) result = caseBPMNElement(end);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.ENTITY: {
				Entity entity = (Entity)theEObject;
				T result = caseEntity(entity);
				if (result == null) result = caseSupportingElement(entity);
				if (result == null) result = caseBPMNElement(entity);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.ERROR: {
				bpmn.Error error = (bpmn.Error)theEObject;
				T result = caseError(error);
				if (result == null) result = caseEventDetail(error);
				if (result == null) result = caseSupportingElement(error);
				if (result == null) result = caseBPMNElement(error);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.EVENT: {
				Event event = (Event)theEObject;
				T result = caseEvent(event);
				if (result == null) result = caseFlowObject(event);
				if (result == null) result = caseGraphicalElement(event);
				if (result == null) result = caseBPMNElement(event);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.EVENT_BASED: {
				EventBased eventBased = (EventBased)theEObject;
				T result = caseEventBased(eventBased);
				if (result == null) result = caseExclusive(eventBased);
				if (result == null) result = caseGateway(eventBased);
				if (result == null) result = caseFlowObject(eventBased);
				if (result == null) result = caseGraphicalElement(eventBased);
				if (result == null) result = caseBPMNElement(eventBased);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.EVENT_DETAIL: {
				EventDetail eventDetail = (EventDetail)theEObject;
				T result = caseEventDetail(eventDetail);
				if (result == null) result = caseSupportingElement(eventDetail);
				if (result == null) result = caseBPMNElement(eventDetail);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.EXCLUSIVE: {
				Exclusive exclusive = (Exclusive)theEObject;
				T result = caseExclusive(exclusive);
				if (result == null) result = caseGateway(exclusive);
				if (result == null) result = caseFlowObject(exclusive);
				if (result == null) result = caseGraphicalElement(exclusive);
				if (result == null) result = caseBPMNElement(exclusive);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.EXPRESSION: {
				Expression expression = (Expression)theEObject;
				T result = caseExpression(expression);
				if (result == null) result = caseSupportingElement(expression);
				if (result == null) result = caseBPMNElement(expression);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.FLOW_OBJECT: {
				FlowObject flowObject = (FlowObject)theEObject;
				T result = caseFlowObject(flowObject);
				if (result == null) result = caseGraphicalElement(flowObject);
				if (result == null) result = caseBPMNElement(flowObject);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.GATE: {
				Gate gate = (Gate)theEObject;
				T result = caseGate(gate);
				if (result == null) result = caseSupportingElement(gate);
				if (result == null) result = caseBPMNElement(gate);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.GATEWAY: {
				Gateway gateway = (Gateway)theEObject;
				T result = caseGateway(gateway);
				if (result == null) result = caseFlowObject(gateway);
				if (result == null) result = caseGraphicalElement(gateway);
				if (result == null) result = caseBPMNElement(gateway);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.GRAPHICAL_ELEMENT: {
				GraphicalElement graphicalElement = (GraphicalElement)theEObject;
				T result = caseGraphicalElement(graphicalElement);
				if (result == null) result = caseBPMNElement(graphicalElement);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.GROUP: {
				Group group = (Group)theEObject;
				T result = caseGroup(group);
				if (result == null) result = caseArtifact(group);
				if (result == null) result = caseGraphicalElement(group);
				if (result == null) result = caseBPMNElement(group);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.INCLUSIVE: {
				Inclusive inclusive = (Inclusive)theEObject;
				T result = caseInclusive(inclusive);
				if (result == null) result = caseGateway(inclusive);
				if (result == null) result = caseFlowObject(inclusive);
				if (result == null) result = caseGraphicalElement(inclusive);
				if (result == null) result = caseBPMNElement(inclusive);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.INPUT_SET: {
				InputSet inputSet = (InputSet)theEObject;
				T result = caseInputSet(inputSet);
				if (result == null) result = caseSupportingElement(inputSet);
				if (result == null) result = caseBPMNElement(inputSet);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.INTERMEDIATE: {
				Intermediate intermediate = (Intermediate)theEObject;
				T result = caseIntermediate(intermediate);
				if (result == null) result = caseEvent(intermediate);
				if (result == null) result = caseFlowObject(intermediate);
				if (result == null) result = caseGraphicalElement(intermediate);
				if (result == null) result = caseBPMNElement(intermediate);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.LANE: {
				Lane lane = (Lane)theEObject;
				T result = caseLane(lane);
				if (result == null) result = caseSwimlane(lane);
				if (result == null) result = caseGraphicalElement(lane);
				if (result == null) result = caseBPMNElement(lane);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.LINK: {
				Link link = (Link)theEObject;
				T result = caseLink(link);
				if (result == null) result = caseEventDetail(link);
				if (result == null) result = caseSupportingElement(link);
				if (result == null) result = caseBPMNElement(link);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.MANUAL: {
				Manual manual = (Manual)theEObject;
				T result = caseManual(manual);
				if (result == null) result = caseTask(manual);
				if (result == null) result = caseActivity(manual);
				if (result == null) result = caseFlowObject(manual);
				if (result == null) result = caseGraphicalElement(manual);
				if (result == null) result = caseBPMNElement(manual);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.MESSAGE_EVENT: {
				MessageEvent messageEvent = (MessageEvent)theEObject;
				T result = caseMessageEvent(messageEvent);
				if (result == null) result = caseEventDetail(messageEvent);
				if (result == null) result = caseSupportingElement(messageEvent);
				if (result == null) result = caseBPMNElement(messageEvent);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.MESSAGE: {
				Message message = (Message)theEObject;
				T result = caseMessage(message);
				if (result == null) result = caseSupportingElement(message);
				if (result == null) result = caseBPMNElement(message);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.MESSAGE_FLOW: {
				MessageFlow messageFlow = (MessageFlow)theEObject;
				T result = caseMessageFlow(messageFlow);
				if (result == null) result = caseConnectingObjects(messageFlow);
				if (result == null) result = caseGraphicalElement(messageFlow);
				if (result == null) result = caseBPMNElement(messageFlow);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.MULTI_INSTANCE_LOOP_ACTIVITY: {
				MultiInstanceLoopActivity multiInstanceLoopActivity = (MultiInstanceLoopActivity)theEObject;
				T result = caseMultiInstanceLoopActivity(multiInstanceLoopActivity);
				if (result == null) result = caseActivity(multiInstanceLoopActivity);
				if (result == null) result = caseFlowObject(multiInstanceLoopActivity);
				if (result == null) result = caseGraphicalElement(multiInstanceLoopActivity);
				if (result == null) result = caseBPMNElement(multiInstanceLoopActivity);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.NONE: {
				None none = (None)theEObject;
				T result = caseNone(none);
				if (result == null) result = caseTask(none);
				if (result == null) result = caseActivity(none);
				if (result == null) result = caseFlowObject(none);
				if (result == null) result = caseGraphicalElement(none);
				if (result == null) result = caseBPMNElement(none);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.OUTPUT_SET: {
				OutputSet outputSet = (OutputSet)theEObject;
				T result = caseOutputSet(outputSet);
				if (result == null) result = caseSupportingElement(outputSet);
				if (result == null) result = caseBPMNElement(outputSet);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.PARALLEL: {
				Parallel parallel = (Parallel)theEObject;
				T result = caseParallel(parallel);
				if (result == null) result = caseGateway(parallel);
				if (result == null) result = caseFlowObject(parallel);
				if (result == null) result = caseGraphicalElement(parallel);
				if (result == null) result = caseBPMNElement(parallel);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.PARTICIPANT: {
				Participant participant = (Participant)theEObject;
				T result = caseParticipant(participant);
				if (result == null) result = caseSupportingElement(participant);
				if (result == null) result = caseBPMNElement(participant);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.POOL: {
				Pool pool = (Pool)theEObject;
				T result = casePool(pool);
				if (result == null) result = caseSwimlane(pool);
				if (result == null) result = caseGraphicalElement(pool);
				if (result == null) result = caseBPMNElement(pool);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.PROCESS: {
				bpmn.Process process = (bpmn.Process)theEObject;
				T result = caseProcess(process);
				if (result == null) result = caseSupportingElement(process);
				if (result == null) result = caseBPMNElement(process);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.PROPERTY: {
				Property property = (Property)theEObject;
				T result = caseProperty(property);
				if (result == null) result = caseSupportingElement(property);
				if (result == null) result = caseBPMNElement(property);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.RECEIVE: {
				Receive receive = (Receive)theEObject;
				T result = caseReceive(receive);
				if (result == null) result = caseTask(receive);
				if (result == null) result = caseActivity(receive);
				if (result == null) result = caseFlowObject(receive);
				if (result == null) result = caseGraphicalElement(receive);
				if (result == null) result = caseBPMNElement(receive);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.REFERENCE_SUB_PROCESS: {
				ReferenceSubProcess referenceSubProcess = (ReferenceSubProcess)theEObject;
				T result = caseReferenceSubProcess(referenceSubProcess);
				if (result == null) result = caseSubProcess(referenceSubProcess);
				if (result == null) result = caseActivity(referenceSubProcess);
				if (result == null) result = caseFlowObject(referenceSubProcess);
				if (result == null) result = caseGraphicalElement(referenceSubProcess);
				if (result == null) result = caseBPMNElement(referenceSubProcess);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.REFERENCE_TASK: {
				ReferenceTask referenceTask = (ReferenceTask)theEObject;
				T result = caseReferenceTask(referenceTask);
				if (result == null) result = caseTask(referenceTask);
				if (result == null) result = caseActivity(referenceTask);
				if (result == null) result = caseFlowObject(referenceTask);
				if (result == null) result = caseGraphicalElement(referenceTask);
				if (result == null) result = caseBPMNElement(referenceTask);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.REUSABLE: {
				Reusable reusable = (Reusable)theEObject;
				T result = caseReusable(reusable);
				if (result == null) result = caseSubProcess(reusable);
				if (result == null) result = caseActivity(reusable);
				if (result == null) result = caseFlowObject(reusable);
				if (result == null) result = caseGraphicalElement(reusable);
				if (result == null) result = caseBPMNElement(reusable);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.ROLE: {
				Role role = (Role)theEObject;
				T result = caseRole(role);
				if (result == null) result = caseSupportingElement(role);
				if (result == null) result = caseBPMNElement(role);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.SCRIPT: {
				Script script = (Script)theEObject;
				T result = caseScript(script);
				if (result == null) result = caseTask(script);
				if (result == null) result = caseActivity(script);
				if (result == null) result = caseFlowObject(script);
				if (result == null) result = caseGraphicalElement(script);
				if (result == null) result = caseBPMNElement(script);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.SEND: {
				Send send = (Send)theEObject;
				T result = caseSend(send);
				if (result == null) result = caseTask(send);
				if (result == null) result = caseActivity(send);
				if (result == null) result = caseFlowObject(send);
				if (result == null) result = caseGraphicalElement(send);
				if (result == null) result = caseBPMNElement(send);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.SEQUENCE_FLOW: {
				SequenceFlow sequenceFlow = (SequenceFlow)theEObject;
				T result = caseSequenceFlow(sequenceFlow);
				if (result == null) result = caseConnectingObjects(sequenceFlow);
				if (result == null) result = caseGraphicalElement(sequenceFlow);
				if (result == null) result = caseBPMNElement(sequenceFlow);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.SERVICE: {
				Service service = (Service)theEObject;
				T result = caseService(service);
				if (result == null) result = caseTask(service);
				if (result == null) result = caseActivity(service);
				if (result == null) result = caseFlowObject(service);
				if (result == null) result = caseGraphicalElement(service);
				if (result == null) result = caseBPMNElement(service);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.SIGNAL: {
				Signal signal = (Signal)theEObject;
				T result = caseSignal(signal);
				if (result == null) result = caseEventDetail(signal);
				if (result == null) result = caseSupportingElement(signal);
				if (result == null) result = caseBPMNElement(signal);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.STANDARD_LOOP_ACTIVITY: {
				StandardLoopActivity standardLoopActivity = (StandardLoopActivity)theEObject;
				T result = caseStandardLoopActivity(standardLoopActivity);
				if (result == null) result = caseActivity(standardLoopActivity);
				if (result == null) result = caseFlowObject(standardLoopActivity);
				if (result == null) result = caseGraphicalElement(standardLoopActivity);
				if (result == null) result = caseBPMNElement(standardLoopActivity);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.START: {
				Start start = (Start)theEObject;
				T result = caseStart(start);
				if (result == null) result = caseEvent(start);
				if (result == null) result = caseFlowObject(start);
				if (result == null) result = caseGraphicalElement(start);
				if (result == null) result = caseBPMNElement(start);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.SUB_PROCESS: {
				SubProcess subProcess = (SubProcess)theEObject;
				T result = caseSubProcess(subProcess);
				if (result == null) result = caseActivity(subProcess);
				if (result == null) result = caseFlowObject(subProcess);
				if (result == null) result = caseGraphicalElement(subProcess);
				if (result == null) result = caseBPMNElement(subProcess);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.SUPPORTING_ELEMENT: {
				SupportingElement supportingElement = (SupportingElement)theEObject;
				T result = caseSupportingElement(supportingElement);
				if (result == null) result = caseBPMNElement(supportingElement);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.SWIMLANE: {
				Swimlane swimlane = (Swimlane)theEObject;
				T result = caseSwimlane(swimlane);
				if (result == null) result = caseGraphicalElement(swimlane);
				if (result == null) result = caseBPMNElement(swimlane);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.TASK: {
				Task task = (Task)theEObject;
				T result = caseTask(task);
				if (result == null) result = caseActivity(task);
				if (result == null) result = caseFlowObject(task);
				if (result == null) result = caseGraphicalElement(task);
				if (result == null) result = caseBPMNElement(task);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.TERMINATE: {
				Terminate terminate = (Terminate)theEObject;
				T result = caseTerminate(terminate);
				if (result == null) result = caseEventDetail(terminate);
				if (result == null) result = caseSupportingElement(terminate);
				if (result == null) result = caseBPMNElement(terminate);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.TIME_DATE_EXPRESSION: {
				TimeDateExpression timeDateExpression = (TimeDateExpression)theEObject;
				T result = caseTimeDateExpression(timeDateExpression);
				if (result == null) result = caseExpression(timeDateExpression);
				if (result == null) result = caseSupportingElement(timeDateExpression);
				if (result == null) result = caseBPMNElement(timeDateExpression);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.TIMER: {
				Timer timer = (Timer)theEObject;
				T result = caseTimer(timer);
				if (result == null) result = caseEventDetail(timer);
				if (result == null) result = caseSupportingElement(timer);
				if (result == null) result = caseBPMNElement(timer);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.TRANSACTION: {
				Transaction transaction = (Transaction)theEObject;
				T result = caseTransaction(transaction);
				if (result == null) result = caseSupportingElement(transaction);
				if (result == null) result = caseBPMNElement(transaction);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.USER: {
				User user = (User)theEObject;
				T result = caseUser(user);
				if (result == null) result = caseTask(user);
				if (result == null) result = caseActivity(user);
				if (result == null) result = caseFlowObject(user);
				if (result == null) result = caseGraphicalElement(user);
				if (result == null) result = caseBPMNElement(user);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case BpmnPackage.WEB_SERVICE: {
				WebService webService = (WebService)theEObject;
				T result = caseWebService(webService);
				if (result == null) result = caseBPMNElement(webService);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			default: return defaultCase(theEObject);
		}
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Activity</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Activity</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseActivity(Activity object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Ad Hoc Process</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Ad Hoc Process</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseAdHocProcess(AdHocProcess object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Annotation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Annotation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseAnnotation(Annotation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Artifact</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Artifact</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseArtifact(Artifact object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Artifact Input</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Artifact Input</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseArtifactInput(ArtifactInput object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Artifact Output</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Artifact Output</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseArtifactOutput(ArtifactOutput object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Assignment</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Assignment</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseAssignment(Assignment object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Association</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Association</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseAssociation(Association object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>BPMN Element</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>BPMN Element</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseBPMNElement(BPMNElement object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Business Process Diagram</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Business Process Diagram</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseBusinessProcessDiagram(BusinessProcessDiagram object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Cancel</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Cancel</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCancel(Cancel object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Category</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Category</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCategory(Category object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Compensate</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Compensate</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCompensate(Compensate object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Complex</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Complex</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseComplex(Complex object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Condition</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Condition</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCondition(Condition object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Conditional</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Conditional</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseConditional(Conditional object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Connecting Objects</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Connecting Objects</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseConnectingObjects(ConnectingObjects object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Data Based</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Data Based</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseDataBased(DataBased object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Data Object</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Data Object</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseDataObject(DataObject object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Embedded</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Embedded</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseEmbedded(Embedded object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>End</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>End</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseEnd(End object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Entity</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Entity</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseEntity(Entity object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Error</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Error</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseError(bpmn.Error object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Event</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Event</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseEvent(Event object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Event Based</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Event Based</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseEventBased(EventBased object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Event Detail</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Event Detail</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseEventDetail(EventDetail object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Exclusive</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Exclusive</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseExclusive(Exclusive object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Expression</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Expression</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseExpression(Expression object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Flow Object</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Flow Object</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFlowObject(FlowObject object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Gate</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Gate</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseGate(Gate object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Gateway</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Gateway</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseGateway(Gateway object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Graphical Element</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Graphical Element</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseGraphicalElement(GraphicalElement object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Group</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Group</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseGroup(Group object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Inclusive</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Inclusive</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseInclusive(Inclusive object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Input Set</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Input Set</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseInputSet(InputSet object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Intermediate</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Intermediate</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseIntermediate(Intermediate object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Lane</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Lane</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseLane(Lane object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Link</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Link</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseLink(Link object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Manual</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Manual</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseManual(Manual object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Message Event</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Message Event</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseMessageEvent(MessageEvent object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Message</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Message</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseMessage(Message object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Message Flow</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Message Flow</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseMessageFlow(MessageFlow object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Multi Instance Loop Activity</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Multi Instance Loop Activity</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseMultiInstanceLoopActivity(MultiInstanceLoopActivity object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>None</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>None</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseNone(None object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Output Set</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Output Set</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseOutputSet(OutputSet object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Parallel</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Parallel</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseParallel(Parallel object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Participant</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Participant</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseParticipant(Participant object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Pool</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Pool</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T casePool(Pool object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Process</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Process</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseProcess(bpmn.Process object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Property</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Property</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseProperty(Property object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Receive</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Receive</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseReceive(Receive object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Reference Sub Process</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Reference Sub Process</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseReferenceSubProcess(ReferenceSubProcess object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Reference Task</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Reference Task</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseReferenceTask(ReferenceTask object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Reusable</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Reusable</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseReusable(Reusable object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Role</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Role</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseRole(Role object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Script</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Script</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseScript(Script object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Send</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Send</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseSend(Send object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Sequence Flow</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Sequence Flow</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseSequenceFlow(SequenceFlow object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Service</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Service</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseService(Service object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Signal</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Signal</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseSignal(Signal object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Standard Loop Activity</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Standard Loop Activity</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseStandardLoopActivity(StandardLoopActivity object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Start</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Start</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseStart(Start object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Sub Process</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Sub Process</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseSubProcess(SubProcess object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Supporting Element</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Supporting Element</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseSupportingElement(SupportingElement object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Swimlane</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Swimlane</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseSwimlane(Swimlane object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Task</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Task</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTask(Task object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Terminate</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Terminate</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTerminate(Terminate object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Time Date Expression</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Time Date Expression</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTimeDateExpression(TimeDateExpression object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Timer</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Timer</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTimer(Timer object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Transaction</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Transaction</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTransaction(Transaction object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>User</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>User</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseUser(User object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Web Service</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Web Service</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseWebService(WebService object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch, but this is the last case anyway.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
	 * @generated
	 */
	public T defaultCase(EObject object) {
		return null;
	}

} //BpmnSwitch
